//package com;
//
//import org.springframework.beans.BeansException;
//import org.springframework.beans.factory.config.BeanDefinition;
//import org.springframework.beans.factory.config.BeanDefinitionVisitor;
//import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
//import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
//import org.springframework.util.StringValueResolver;
//
//import java.util.Set;
//
///**BeanPostProcessor的作用域是容器级： 用于对bean对象进行增强(初始化之前和初始化之后)*/
////BeanFactoryPostProcessor,可以在spring的bean创建之前，修改bean的定义属性。
////也就是说，Spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据，并可以根据需要进行修改
//public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
//
//    //private Set<String> strValues;
//
//    /*public MyBeanFactoryPostProcessor(Set<String> strValues) {
//        this.strValues = strValues;
//    }*/
//
//    /**重写BeanFactoryPostProcessor的postProcessBeanFactory方法， 用于：对beanFactory进行增强。
//     * (这里举例用beanFactory给bean的属性设置值)*/
//    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
//        System.out.println("0.【BeanFactoryPostProcessor接口的postProcessBeanFactory()】 " +
//                "此方法在对象创建之前执行(bean工厂<beanFactory，也就是spring容器>创建之后)，作用：对beanFactory进行增强。" +
//                "(这里举例用beanFactory给bean的age属性设置值)");
//        BeanDefinition beanDefinition=beanFactory.getBeanDefinition("s1");
//        beanDefinition.getPropertyValues().addPropertyValue("sex","男");//会调用setSex()方法
//
//
//        /*String []  beanIds=beanFactory.getBeanDefinitionNames();//1.获取所有bean的id
//        for (String beanId : beanIds ) {
//            BeanDefinition bean=beanFactory.getBeanDefinition(beanId);//2.用beanFactory根据beanId获取bean对象
//
//            // 创建了一个string类型的解析器(作用：如果strVal在applicationContext.xml中存在，就用***代替)
//            StringValueResolver stringValueResolver=new StringValueResolver() {
//                public String resolveStringValue(String strVal) {
//                    if(strValues.contains( strVal.toLowerCase())){
//                        return "***";
//                    }else{
//                        return strVal;
//                    }
//                }
//            };
//            //使用上边的解析器创建bean对象访问器BeanDefinitionVisitor
//            BeanDefinitionVisitor beanDefinitionVisitor=new BeanDefinitionVisitor(stringValueResolver);
//            //3.用beanDefinitionVisitor的visitBeanDefinition方法访问bean对象(对bean对象进行增强，将对象的敏感字替换为***)
//            beanDefinitionVisitor.visitBeanDefinition(bean);
//        }*/
//
//
//    }
//
//
//}
